package lkx.demo.test4;

/**
 *
 * 测试运算符的使用5：位运算符
 *
 * 1. <<   >>   >>>   &  |  ^  ~
 *
 * 2. 说明：
 *
 * ① <<   >>   >>>   &  |  ^  ~ ：针对数值类型的变量或常量进行运算，运算的结果也是数值
 * ②
 * << : 在一定范围内，每向左移动一位，结果就在原有的基础上 * 2。（对于正数、负数都适用）
 * >> : 在一定范围内，每向右移动一位，结果就在原有的基础上 / 2。（对于正数、负数都适用）
 *
 * 3. 面试题：高效的方式计算2 * 8 ？
 *
 * 2 << 3 或 8 << 1
 *
 * @author kunxianli
 * @date 2024/01/09 18:55
 **/
public class TestBitSign {


    public static void main(String[] args) {

//        << : 在一定范围内，每向左移动一位，结果就在原有的基础上 * 2。（对于正数、负数都适用）
        int a = 9;
        System.out.println(a << 1); //18
        System.out.println(a << 27);//1207959552

//        当左移的位数 n 超过该数据类型的总位数时，相当于左移（n-总位数）位
        System.out.println(a << 28);//-1879048192

        int b = -9;
        System.out.println(b << 1); //18
        System.out.println(b << 27);//-1207959552
//        当左移的位数 n 超过该数据类型的总位数时，相当于左移（n-总位数）位
        System.out.println(b << 28);//1879048192


//        无符号右移补位都是0
        int c = -10;
        System.out.println(c >>> 1);//2147483643
        int d = 10;
        System.out.println(d >>> 1);//5



    }

}
